package artaza.clasesdao;

import artaza.persistencia.Camarero;
import org.springframework.stereotype.Repository;
import com.google.appengine.api.datastore.Key;
import java.util.ArrayList;
import java.util.List;

@Repository
public class CamareroDAOImpl extends GenericDAOJPAImpl<Camarero, Key>
        implements CamareroDAO {

    @Override
    public Camarero findByDNI(Class<Camarero> typeClass, String criterio) {
        String query = "SELECT FROM Camarero c WHERE c.dni='" + criterio + "'";
        Camarero c = (Camarero) em.createQuery(query).getSingleResult();
        return em.find(Camarero.class, c.getId());
    }

    @Override
    public List<Camarero> findByNombre(Class<Camarero> typeClass, String criterio) {
        String query = "SELECT FROM Camarero c WHERE c.nombre='" + criterio + "'";
        List<Camarero> camareros = (List<Camarero>) em.createQuery(query).getResultList();
        return camareros;
    }

    @Override
    public List<Camarero> findByApellidos(Class<Camarero> typeClass, String criterio) {
        String query = "SELECT FROM Camarero c WHERE c.apellidos='" + criterio + "'";
        List<Camarero> camareros = (List<Camarero>) em.createQuery(query).getResultList();
        return camareros;
    }

    @Override
    public List<Camarero> findByTelefono(Class<Camarero> typeClass, String criterio) {
        String query = "SELECT FROM Camarero c WHERE c.telefono='" + criterio + "'";
        List<Camarero> camareros = (List<Camarero>) em.createQuery(query).getResultList();
        return camareros;
    }

    @Override
    public List<Camarero> findByCategoria(Class<Camarero> typeClass, String criterio) {
        String query = "SELECT FROM Camarero c WHERE c.categoria='" + criterio + "'";
        List<Camarero> camareros = (List<Camarero>) em.createQuery(query).getResultList();
        return camareros;
    }

   

    @Override
    public List<Camarero> findByMetodoIntermedio(Class<Camarero> typeClass, String palabra, int criterio) {
        List<Camarero> plantilla = this.getAll(Camarero.class);
        List<Camarero> camareros = new ArrayList<Camarero>();
        switch (criterio) {
            case 1: {

                for (Camarero c : plantilla) {
                    if (c.getNombre().toLowerCase().compareTo(palabra.toLowerCase()) == 0) {
                        camareros.add(c);
                    }
                }
                break;
            }

             case 2:{
                 for (Camarero c : plantilla) {
                    if (c.getApellidos().toLowerCase().compareTo(palabra.toLowerCase()) == 0) {
                        camareros.add(c);
                    }
                }
                break;
             }

             case 3:{
                 for (Camarero c : plantilla) {
                    if (c.getTelefono().toLowerCase().compareTo(palabra.toLowerCase()) == 0) {
                        camareros.add(c);
                    }
                }
                break;
             }

             case 4:{
                 for (Camarero c : plantilla) {
                    if (c.getDni().toLowerCase().compareTo(palabra.toLowerCase()) == 0) {
                        camareros.add(c);
                    }
                }
                break;
             }

             case 5:{
                 for (Camarero c : plantilla) {
                    if (c.getCategoria().toLowerCase().compareTo(palabra.toLowerCase()) == 0) {
                        camareros.add(c);
                    }
                }
                break;
             }

        }

        return camareros;
    }
}
